package com.yt.product.service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yt.product.common.config.YmlConfig;
import com.yt.product.mapper.SupplierInfoMapper;
import com.yt.product.models.bo.SupplierInfoSaveBO;
import com.yt.product.models.dto.SupplierInfoDTO;
import com.yt.product.models.service.ISupplierInfoService;
import com.yt.product.models.vo.SupplierInfoVO;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 供应商信息控制器
 *
 * @author zhou
 * @Date 2025-09-05 11:31:21
 */
@DubboService
public class SupplierInfoServiceImpl extends ServiceImpl<SupplierInfoMapper, SupplierInfoDTO> implements ISupplierInfoService {

    @Resource
    private YmlConfig ymlConfig;
    @Resource
    private SupplierInfoMapper supplierInfoMapper;

    @Override
    public boolean add(SupplierInfoSaveBO saveBO) {
        SupplierInfoDTO dto = new SupplierInfoDTO();
        BeanUtils.copyProperties(saveBO, dto);
        Long id = ymlConfig.getPkId();
        dto.setId(id);
        return this.insert(dto);
    }

    /**
     * 修改供应商信息
     *
     * @param bo 前端传递的修改参数（包含id和待修改字段）
     * @return 是否修改成功
     */
    public boolean updateSupplier(SupplierInfoSaveBO bo) {
        // 1. 将BO转换为DO（数据对象，与数据库表映射）
        SupplierInfoDTO supplierDO = new SupplierInfoDTO();
        BeanUtils.copyProperties(bo, supplierDO); // 拷贝属性（需保证字段名一致）

        // 2. 执行数据库更新操作（按id更新）
        int rows = supplierInfoMapper.updateById(supplierDO);

        // 3. 返回修改结果（rows > 0 表示修改成功）
        return rows > 0;
    }

    public List<SupplierInfoVO> querySupplier() {
        // 1. 构建查询条件（这里示例查询「状态为启用（status=1）」的供应商，可根据需求调整）
        Wrapper<SupplierInfoDTO> wrapper = new EntityWrapper<>();
        wrapper.ne("status", 2);

        // 2. 查询数据库，获取供应商 DTO 列表
        List<SupplierInfoDTO> supplierDTOList = this.selectList(wrapper);
        // 3. 空列表判断（无数据时返回 null，与原逻辑保持一致）
        if (supplierDTOList == null || supplierDTOList.isEmpty()) {
            return null;
        }

        // 4. DTO → VO 转换（拷贝属性 + 封装最终返回结构）
        List<SupplierInfoVO> supplierVOList = new ArrayList<>();
        for (SupplierInfoDTO dto : supplierDTOList) {
            SupplierInfoVO vo = new SupplierInfoVO();
            BeanUtils.copyProperties(dto, vo); // 把 DTO 属性拷贝到 VO（含 BaseDTO 继承的 id、createTime 等）
            supplierVOList.add(vo);
        }

        return supplierVOList;
    }
}
